package com.atguigu.gmall.pms.feign;

import com.atguigu.gmall.pms.feign.fallback.GmallSmsFallback;
import com.atguigu.gmall.sms.api.GmallSmsApi;
import org.springframework.cloud.openfeign.FeignClient;

/**
 * GmallSmsClient：feign客户端的原理，将调用的方法转为http请求访问指定微服务接口得到返回值
 * 请求地址：访问的目标的服务可能多实例启动，最好使用ribbon的负载均衡 http://192.168.75.1:18085
 * 请求方式：@PostMapping("/saveSkuSaleInfo")
 * 请求参数：@RequestBody注解必须写
 * 返回值：ResponseVo<Object>,feign已经帮我们自动封装请求报文发起请求，将响应的报文响应体转为方法的返回值类型对象
 */

//需要远程访问的微服务的服务名，然后它会自己从nacos里面根据服务名查到ip地址和端口号进行访问
//fallback，表示备选方案，表示远程访问时配置了熔断降级
@FeignClient(value = "sms-service"/*,fallback = GmallSmsFallback.class*/)//现在使用分布式事务，不能用熔断降级。用了熔断降级后，远程调用的方法了出异常，也会被兜底方法替代，还以为没有出异常呢，分布式事务就无法正常生效
public interface GmallSmsClient extends GmallSmsApi {

    /*@PostMapping("sms/skubounds/saveSkuSaleInfo")
    public ResponseVo<Object> saveSkuSaleInfo(@RequestBody SkuSaleInfoVo skuSaleInfoVo);*/
    //继承GmallSmsApi后，以上方法就不用写了，因为GmallSmsApi里面有

}
